基于 Racket 的 To-Do List 工具 RReminder

#Innolight #Racket

Pasted image 20250814110841.png|650

![[RReminder.excalidraw]]

需求背景

目前市面上的 To-Do List 工具的数据都是保存在云端的,违背了我对数据安全的一些准则。大多工具都是极其复杂,而我只是想要一个最简单的代办任务功能,作为一个极简主义者,完全不能忍受,所以打算基于 Racket 开发一个 To-Do List 工具。经过对多个工具的调研,决定参考 macOS 的 Reminder 的交互逻辑来实现。为了实现数据的灵活管理,参考了 Obsidian 的仓库的管理逻辑。

Pasted image 20250807233035.png|450

Pasted image 20250923112325.png|450

技术选型

这个 To-Do List 工具采用 Electron + Racket 架构实现,达到跨平台效果:

如果想要多端同步的效果,通过第三方云盘同步后台的 json 数据即可。

界面布局

左侧菜单栏(侧边栏)

任务展示区域

底部操作

数据模型设计

List(任务列表)

{
  "id": "string",           // 唯一标识符
  "name": "string",         // 列表名称
  "createdAt": "ISODateString", // 创建时间
  "updatedAt": "ISODateString"  // 更新时间
}

Task(任务)

{
  "id": "string",           // 唯一标识符
  "title": "string",        // 任务标题
  "notes": "string",        // 备注信息
  "completed": "boolean",   // 完成状态
  "listId": "string",       // 所属列表ID
  "priority": "none|low|medium|high", // 优先级
  "dueDate": "ISODateString|null",    // 截止日期
  "dueTime": "HH:mm|null",           // 截止时间
  "reminder": "boolean",             // 是否设置提醒
  "reminderTime": "ISODateString|null", // 提醒时间
  "createdAt": "ISODateString",      // 创建时间
  "updatedAt": "ISODateString",      // 更新时间
  "completedAt": "ISODateString|null" // 完成时间
}

Config(配置)

{
  "dataPath": "string",     // 数据文件路径
  "defaultListId": "string|null", // 默认列表
  "theme": "light|dark",    // 主题
  "notifications": {
    "enabled": "boolean",   // 通知开关
    "sound": "boolean"      // 声音提醒
  }
}

功能实现细节

数据存储机制

任务提醒机制

搜索功能

任务排序逻辑

交互细节

视觉反馈

API 接口设计

列表管理

任务管理

配置管理

搜索功能

代码结构

前端架构

frontend/
├── main.js          # Electron 主进程
├── index.html       # 主界面 HTML
├── app.js           # 应用主逻辑和UI管理
├── styles.css       # 样式文件
├── preload.js       # 安全的IPC桥接
├── config.js        # 配置管理
├── data-manager.js  # 数据操作封装
├── notification.js  # 通知系统
├── search.js        # 搜索功能
└── utils/           # 工具函数
    ├── date-utils.js
    └── task-utils.js

后端架构

backend/
├── server.rkt       # HTTP服务器和路由
├── logic.rkt        # 业务逻辑和数据持久化
├── config.rkt       # 配置管理
├── backup.rkt       # 数据备份机制
└── utils.rkt        # 通用工具函数